home *** CD-ROM | disk | FTP | other *** search
- /*
- File: MoreTemplates.c
-
- Contains: xxx put contents here xxx
-
- Written by: Steve Fisher, Eric Trehus, and Mike Cleron
-
- Copyright: © 1992 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <3> 2/27/95 TMH modify to compile withy metroworks
- <2> 2/14/95 CL remove warning for cplus
- <1> 5/26/93 CL first checked in
- <26> 4/8/93 sf add some targeted calls
- <25> 4/5/93 jse Add "GetRStringPropertyFromItemTarget()"
- <24> 4/3/93 sf fix GetTemplateFSSpec
- <23> 3/31/93 sf key chain stuff
- <22> 2/9/93 sf Ignore "markAsDirty"
- <21> 2/7/93 sf Add Busy call
- <20> 1/22/93 jse Add RequestSyncDSSpec()
- <18+> 1/13/93 jse Sync to new headers
- <18> 12/3/92 jse Fill in stubs for new DET callbacks
- <17> 11/20/92 jse Add another routine: GetTemplateNumberForSublistItem()
- <16> 11/19/92 jse Comment out unused parameters in stub routines
- <15> 11/19/92 jse Add new calls for new DET callbacks
- <14> 10/13/92 sf Add AboutToTalk
- <13> 9/11/92 sf add EnableDisable
- <12> 9/8/92 sf add SaveProperty
- <11> 8/21/92 sf add PropertyEditable calls
- <10> 8/13/92 sf add GetCustomViewBounds
- <9> 8/6/92 sf fix bug in GetNthSelectedItem
- <8> 7/24/92 EMT DE now allocates all handles, so simplified code.
- <7> 7/23/92 EMT Sync up to new header file
- <6> 7/2/92 jse Fix bug in SetPropertyChanged. Change kDETcmdDirtyProperty to
- kDETcmdSetPropertyChanged
- <5> 6/29/92 sf add sync callback
- <4> 6/29/92 sf work around bug in Harry;s menuItemRString callback
- <3> 6/25/92 sf More MPW Police
- <2> 6/24/92 sf add OpenDSSpec
- <1> 6/23/92 sf first checked in
-
- To Do:
- */
-
- #ifndef __MORETEMPLATES__
- #include "MoreTemplates.h"
- #endif
-
- #ifndef __ERRORS__
- #include <Errors.h>
- #endif
-
- #ifndef __RESOURCES__
- #include <Resources.h>
- #endif
-
- // Asserts for debugging. They're only defined when DEBUG is defined
- #ifdef DEBUG
-
- #define BLOCKASSERT(what) { if (!(what)) Debugger(); }
- #define ASSERT(what) do BLOCKASSERT(what) while(0)
-
- #else
-
- #define BLOCKASSERT(what) {}
- #define ASSERT(what) ((void)0)
-
- #endif
-
- pascal OSErr AddToMenu(DETCallBlockPtr callBlockPtr,
- short property,
- short parameter,
- RString *text,
- Boolean isSeparator)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.addMenu.reqFunction = kDETcmdAddMenu;
- cbb.addMenu.property = property;
- cbb.addMenu.target.selector = kDETSelf;
- if (isSeparator)
- {
- text->dataLength = 1;
- text->body[0] = '-';
- }
- cbb.addMenu.name = text;
- cbb.addMenu.parameter = parameter;
- cbb.addMenu.addAfter = -1;
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- return err;
- }
-
- // ### We're assuming that all the new values are in the same
- // position for Number, Binary, and RString properties
- pascal OSErr SetPropertyCommon(DETCallBlockPtr callBlockPtr,
- DETCallFunctions function,
- short property,
- void *newValue,
- long newValueSize,
- Boolean markAsChanged)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.setPropertyBinary.reqFunction = (DETCallBackFunctions)function;
- cbb.setPropertyBinary.property = property;
- cbb.setPropertyBinary.target.selector = kDETSelf;
- cbb.setPropertyBinary.newValue = (Ptr)newValue;
- cbb.setPropertyBinary.newValueSize = newValueSize;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- if ((err == noErr) && markAsChanged)
- {
- err = SetPropertyChanged(callBlockPtr, property, true);
- }
-
- return err;
- }
-
- pascal OSErr SetNumProperty(DETCallBlockPtr callBlockPtr,
- short property,
- long value,
- Boolean markAsChanged)
- {
- OSErr err;
-
- err = SetPropertyCommon(callBlockPtr, (DETCallFunctions)kDETcmdSetPropertyNumber, property, (void*) value, 0, markAsChanged);
-
- return err;
- }
-
- pascal OSErr SetBinaryProperty(DETCallBlockPtr callBlockPtr,
- short property,
- Ptr newValue,
- long newValueSize,
- Boolean markAsChanged)
- {
- OSErr err;
-
- err = SetPropertyCommon(callBlockPtr, (DETCallFunctions)kDETcmdSetPropertyBinary, property, newValue, newValueSize, markAsChanged);
-
- return err;
- }
-
- pascal OSErr SetRStringProperty(DETCallBlockPtr callBlockPtr,
- short property,
- RString* newValue,
- Boolean markAsChanged)
- {
- OSErr err;
-
- err = SetPropertyCommon(callBlockPtr, (DETCallFunctions)kDETcmdSetPropertyRString, property, newValue, 0, markAsChanged);
-
- return err;
- }
-
- pascal OSErr GetNumProperty(DETCallBlockPtr callBlockPtr, short property, long *value)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.getPropertyNumber.reqFunction = kDETcmdGetPropertyNumber;
- cbb.getPropertyNumber.property = property;
- cbb.getPropertyNumber.target.selector = kDETSelf;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- *value = cbb.getPropertyNumber.propertyValue;
-
- return err;
- }
-
- pascal OSErr GetBinaryProperty(DETCallBlockPtr callBlockPtr, short property, Handle *value)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.getPropertyBinary.reqFunction = kDETcmdGetPropertyBinary;
- cbb.getPropertyBinary.property = property;
- cbb.getPropertyBinary.target.selector = kDETSelf;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
- *value = cbb.getPropertyBinary.propertyValue;
-
- return err;
- }
-
- pascal OSErr GetRStringProperty(DETCallBlockPtr callBlockPtr,
- short property,
- RString ***str)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.getPropertyRString.reqFunction = kDETcmdGetPropertyRString;
- cbb.getPropertyRString.property = property;
- cbb.getPropertyRString.target.selector = kDETSelf;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
- *str = cbb.getPropertyRString.propertyValue;
-
- return err;
- }
-
- pascal OSErr GetBinaryPropertySize(DETCallBlockPtr callBlockPtr,
- short property,
- long *size)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.getPropertyBinarySize.reqFunction = kDETcmdGetPropertyBinarySize;
- cbb.getPropertyBinarySize.property = property;
- cbb.getPropertyBinarySize.target.selector = kDETSelf;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
- *size = cbb.getPropertyBinarySize.propertyBinarySize;
-
- return err;
- }
-
- pascal OSErr DirtyProperty(DETCallBlockPtr callBlockPtr, short property)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.dirtyProperty.reqFunction = kDETcmdDirtyProperty;
- cbb.dirtyProperty.property = property;
- cbb.dirtyProperty.target.selector = kDETSelf;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- return err;
- }
-
- pascal OSErr SetPropertyChanged(DETCallBlockPtr callBlockPtr,
- short property,
- Boolean propertyChanged)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.setPropertyChanged.reqFunction = kDETcmdSetPropertyChanged;
- cbb.setPropertyChanged.property = property;
- cbb.setPropertyChanged.target.selector = kDETSelf;
- cbb.setPropertyChanged.propertyChanged = propertyChanged;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- return err;
- }
-
- pascal OSErr GetMyDSSpec(DETCallBlockPtr callBlockPtr,
- short *refNum,
- PackedDSSpec ***pDsSpec)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.getDSSpec.reqFunction = kDETcmdGetDSSpec;
- cbb.getDSSpec.target.selector = kDETSelf;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
- *pDsSpec = cbb.getDSSpec.dsSpec;
- *refNum = cbb.getDSSpec.refNum;
-
- return err;
- }
-
- pascal OSErr GetNumSelectedItems(DETCallBlockPtr callBlockPtr, long *num)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.selectedSublistCount.reqFunction = kDETcmdSelectedSublistCount;
- cbb.selectedSublistCount.target.selector = kDETSelf;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- *num = cbb.selectedSublistCount.count;
-
- return err;
- }
-
- pascal OSErr GetNumSublistItems(DETCallBlockPtr callBlockPtr, long *num)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.sublistCount.reqFunction = kDETcmdSublistCount;
- cbb.sublistCount.target.selector = kDETSelf;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- *num = cbb.sublistCount.count;
-
- return err;
- }
-
- pascal OSErr GetNthSelectedItem(DETCallBlockPtr callBlockPtr,
- long itemNumber,
- PackedDSSpec ***pDsSpec,
- short *refNum)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- ASSERT(pDsSpec != nil);
- cbb.getDSSpec.reqFunction = kDETcmdGetDSSpec;
- cbb.getDSSpec.target.selector = kDETSelectedSublistItem;
- cbb.getDSSpec.target.aspectName = nil;
- cbb.getDSSpec.target.itemNumber = itemNumber;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
- *pDsSpec = cbb.getDSSpec.dsSpec;
- *refNum = cbb.getDSSpec.refNum;
-
- return err;
- }
-
- pascal OSErr GetNthSublistItem(DETCallBlockPtr callBlockPtr,
- long itemNumber,
- PackedDSSpec ***pDsSpec,
- short *refNum)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- ASSERT(pDsSpec != nil);
- cbb.getDSSpec.reqFunction = kDETcmdGetDSSpec;
- cbb.getDSSpec.target.selector = kDETSublistItem;
- cbb.getDSSpec.target.aspectName = nil;
- cbb.getDSSpec.target.itemNumber = itemNumber;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
- *pDsSpec = cbb.getDSSpec.dsSpec;
- *refNum = cbb.getDSSpec.refNum;
-
- return err;
- }
-
- pascal OSErr OpenDSSpec(DETCallBlockPtr callBlockPtr, PackedDSSpec *dsSpec)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.openDSSpec.reqFunction = kDETcmdOpenDSSpec;
- cbb.openDSSpec.dsSpec = dsSpec;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- return err;
- }
-
- pascal OSErr GetMenuItemRString(DETCallBlockPtr callBlockPtr,
- short property,
- long parameter,
- RString ***str)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.menuItemRString.reqFunction = kDETcmdMenuItemRString;
- cbb.menuItemRString.property = property;
- cbb.menuItemRString.target.selector = kDETSelf;
- cbb.menuItemRString.itemParameter = parameter;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
- *str = cbb.menuItemRString.rString;
- if (err == paramErr)
- {
- err = noErr;
- }
-
- return err;
- }
-
- pascal OSErr RequestSync(DETCallBlockPtr callBlockPtr)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.requestSync.reqFunction = kDETcmdRequestSync;
- cbb.requestSync.target.selector = kDETSelf;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- return err;
- }
-
- pascal OSErr RequestSyncDSSpec(DETCallBlockPtr callBlockPtr, PackedDSSpec *dsSpec)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.requestSync.reqFunction = kDETcmdRequestSync;
- cbb.requestSync.target.selector = kDETDSSpec;
- cbb.requestSync.target.dsSpec = dsSpec;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- return err;
- }
-
- pascal OSErr GetCustomViewBounds(DETCallBlockPtr callBlockPtr, short property, Rect *bounds)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.getCustomViewBounds.reqFunction = kDETcmdGetCustomViewBounds;
- cbb.getCustomViewBounds.property = property;
- cbb.getCustomViewBounds.target.selector = kDETSelf;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- *bounds = cbb.getCustomViewBounds.bounds;
-
- return err;
- }
-
- pascal OSErr GetPropertyEditable(DETCallBlockPtr callBlockPtr, short property, Boolean *isEditable)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.getPropertyEditable.reqFunction = kDETcmdGetPropertyEditable;
- cbb.getPropertyEditable.property = property;
- cbb.getPropertyEditable.target.selector = kDETSelf;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- *isEditable = cbb.getPropertyEditable.propertyEditable;
-
- return err;
- }
-
- pascal OSErr SetPropertyEditable(DETCallBlockPtr callBlockPtr, short property, Boolean isEditable)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.setPropertyEditable.reqFunction = kDETcmdSetPropertyEditable;
- cbb.setPropertyEditable.property = property;
- cbb.setPropertyEditable.target.selector = kDETSelf;
- cbb.setPropertyEditable.propertyEditable = isEditable;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- return err;
- }
-
- pascal OSErr SaveProperty(DETCallBlockPtr callBlockPtr, short property)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.saveProperty.reqFunction = kDETcmdSaveProperty;
- cbb.saveProperty.property = property;
- cbb.saveProperty.target.selector = kDETSelf;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- return err;
- }
-
- pascal OSErr GetTemplateFSSpec(DETCallBlockPtr callBlockPtr, DETTargetSelector selector, long itemNumber, FSSpec* spec)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.getTemplateFSSpec.reqFunction = kDETcmdGetTemplateFSSpec;
- cbb.getTemplateFSSpec.target.selector = selector;
- cbb.getTemplateFSSpec.target.itemNumber = itemNumber;
- cbb.getTemplateFSSpec.target.aspectName = nil;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- BlockMove(&cbb.getTemplateFSSpec.fsSpec, spec, sizeof(FSSpec));
- ASSERT(!MemError());
-
- return err;
- }
-
- pascal OSErr AboutToTalk(DETCallBlockPtr callBlockPtr)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.aboutToTalk.reqFunction = kDETcmdAboutToTalk;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- return err;
- }
-
- pascal OSErr GetNumPropertyFromItemTarget(DETCallBlockPtr callBlockPtr, short property,
- DETTargetSelector target, short itemNum, long *value)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.getPropertyNumber.reqFunction = kDETcmdGetPropertyNumber;
- cbb.getPropertyNumber.property = property;
- cbb.getPropertyNumber.target.selector = target;
- cbb.getPropertyNumber.target.itemNumber = itemNum;
- cbb.getPropertyNumber.target.aspectName = nil;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- *value = cbb.getPropertyNumber.propertyValue;
-
- return err;
- }
-
-
- pascal OSErr GetRStringPropertyFromItemTarget(DETCallBlockPtr callBlockPtr, short property,
- DETTargetSelector target, short itemNum, RStringHandle *string)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.getPropertyNumber.reqFunction = kDETcmdGetPropertyRString;
- cbb.getPropertyNumber.property = property;
- cbb.getPropertyNumber.target.selector = target;
- cbb.getPropertyNumber.target.itemNumber = itemNum;
- cbb.getPropertyNumber.target.aspectName = nil;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- if (err == noErr)
- *string = cbb.getPropertyRString.propertyValue;
- else
- *string = nil;
-
- return err;
- }
-
-
- pascal OSErr SetNumPropertyForItemTarget(DETCallBlockPtr callBlockPtr, short property,
- DETTargetSelector target, short itemNum, long value)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.setPropertyNumber.reqFunction = kDETcmdSetPropertyNumber;
- cbb.setPropertyNumber.property = property;
- cbb.setPropertyNumber.target.selector = target;
- cbb.setPropertyNumber.target.itemNumber = itemNum;
- cbb.setPropertyNumber.target.aspectName = nil;
- cbb.setPropertyNumber.newValue = value;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- return err;
- }
-
-
- pascal OSErr CountTemplates(DETCallBlockPtr callBlockPtr, short* numTemplates)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- *numTemplates = 0;
- cbb.templateCounts.reqFunction = kDETcmdTemplateCounts;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- if (err == noErr)
- *numTemplates = (short)cbb.templateCounts.aspectTemplateCount;
-
- return err;
- }
-
- //--------------------------------------------------------------------------------------------------
-
- pascal OSErr GetTemplateResource(DETCallBlockPtr callBlockPtr,
- short whichTemplate,
- OSType resType,
- short resID,
- Handle* resource)
- {
- OSErr err = noErr;
- DETCallBackBlock cbb;
-
- *resource = nil;
-
- cbb.getResource.reqFunction = kDETcmdGetResource;
- cbb.getResource.target.selector = kDETAspectTemplate;
- cbb.getResource.target.itemNumber = whichTemplate;
- cbb.getResource.target.aspectName = nil;
- cbb.getResource.resourceType = resType;
- cbb.getResource.property = resID;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
- if (err == noErr)
- {
- *resource = cbb.getResource.theResource;
- ASSERT(*resource);
-
- if (*resource == nil)
- err = resNotFound;
- }
-
- return err;
- }
-
-
- pascal OSErr GetTemplateNumberForSublistItem(DETCallBlockPtr callBlockPtr,
- long sublistItemNum,
- long *templateNumber)
- {
- OSErr err = noErr;
-
- err = GetNumPropertyFromItemTarget(callBlockPtr,
- kDETAspectTemplateNumber,
- kDETSublistItem,
- (short)sublistItemNum,
- templateNumber);
- return err;
- }
-
- //--------------------------------------------------------------------------------------------------
-
- long WordAlignLong(long p); // the compiler insists on a prototype
- long WordAlignLong(long p)
- {
- return ((p+1) & (~1));
- } // align to next word
-
- //--------------------------------------------------------------------------------------------------
-
- pascal OSErr GetIndRString(short resID, short index, RStringPtr* rstring)
- {
- OSErr err = noErr;
- Handle resource = nil;
- Ptr data;
- RStringPtr found = nil;
- RStringPtr result = nil;
- long resSize;
- short i;
- Ptr farEnd;
- unsigned short length;
- short numStrings;
-
- resource = GetResource('rst#', resID);
- ASSERT(resource);
- if (resource == nil)
- err = resNotFound;
- else
- err = ResError();
-
- if (err == noErr)
- {
- HLock(resource);
-
- numStrings = ((short*) *resource)[1];
- if ((index <= 0) || (index > numStrings))
- err = resNotFound;
-
- if (err == noErr)
- {
- data = *resource + sizeof(short) + sizeof(short);
- found = (RStringPtr) data;
- resSize = GetHandleSize(resource);
- farEnd = data + resSize;
- }
-
- for (i = 1; (i < index) && (err == noErr); i++)
- {
- if (data >= farEnd)
- err = resNotFound;
- else
- {
- data += (found->dataLength + sizeof(ProtoRString));
- data = (Ptr) WordAlignLong((long) data);
- found = (RStringPtr) data;
- }
- }
-
- if (err == noErr)
- {
- length = found->dataLength + sizeof(ProtoRString);
- result = (RStringPtr) NewPtr(length);
- ASSERT(result);
- if (!result)
- err = MemError();
- }
-
- if (err == noErr)
- {
- err = OCECopyRString(found, result, length);
- ASSERT(err == noErr);
- }
-
- if (err == noErr)
- *rstring = result;
- else
- DisposePtr((Ptr) result);
-
- HUnlock(resource);
- }
-
- if (resource != nil)
- ReleaseResource(resource);
-
- return err;
- }
-
- pascal OSErr TemplateBusy(DETCallBlockPtr callBlockPtr)
- {
- OSErr err;
- DETCallBackBlock cbb;
-
- cbb.busy.reqFunction = kDETcmdBusy;
-
- err = CallDETCallBackProc(callBlockPtr->protoCall.callBack,callBlockPtr,&cbb);
- // err = CallBackDET(callBlockPtr, &cbb);
-
- return err;
- }
-
-